/*
 * Copyright (c) 2002, 2004, Oracle and/or its affiliates. All rights reserved.
 * ORACLE PROPRIETARY/CONFIDENTIAL. Use is subject to license terms.
 *
 *
 *
 *
 *
 *
 *
 *
 *
 *
 *
 *
 *
 *
 *
 *
 *
 *
 *
 *
 */

package com.sun.corba.se.spi.protocol;

import java.nio.ByteBuffer;

import org.omg.CORBA.INTERNAL;
import org.omg.CORBA.SystemException;
import org.omg.CORBA.portable.ResponseHandler;
import org.omg.CORBA.portable.UnknownException;
import org.omg.CORBA_2_3.portable.InputStream;
import org.omg.CORBA_2_3.portable.OutputStream;

import com.sun.corba.se.pept.broker.Broker;
import com.sun.corba.se.pept.protocol.MessageMediator;
import com.sun.corba.se.pept.encoding.InputObject;
import com.sun.corba.se.pept.encoding.OutputObject;
import com.sun.corba.se.pept.protocol.ProtocolHandler;
import com.sun.corba.se.pept.transport.Connection;

import com.sun.corba.se.spi.ior.IOR;
import com.sun.corba.se.spi.ior.ObjectKey;
import com.sun.corba.se.spi.ior.iiop.GIOPVersion;
import com.sun.corba.se.spi.protocol.CorbaProtocolHandler;
import com.sun.corba.se.spi.servicecontext.ServiceContexts;

import com.sun.corba.se.impl.protocol.giopmsgheaders.LocateReplyMessage;
import com.sun.corba.se.impl.protocol.giopmsgheaders.LocateReplyOrReplyMessage;
import com.sun.corba.se.impl.protocol.giopmsgheaders.Message;
import com.sun.corba.se.impl.protocol.giopmsgheaders.MessageBase;
import com.sun.corba.se.impl.protocol.giopmsgheaders.MessageHandler;
import com.sun.corba.se.impl.protocol.giopmsgheaders.ReplyMessage;
import com.sun.corba.se.impl.protocol.giopmsgheaders.ReplyMessage_1_0;
import com.sun.corba.se.impl.protocol.giopmsgheaders.RequestMessage;
import com.sun.corba.se.impl.protocol.giopmsgheaders.RequestMessage_1_0;

/**
 * @author Harold Carr
 */
public interface CorbaMessageMediator
        extends
        MessageMediator,
        ResponseHandler {
    public void setReplyHeader(LocateReplyOrReplyMessage header);

    public LocateReplyMessage getLocateReplyHeader();

    public ReplyMessage getReplyHeader();

    public void setReplyExceptionDetailMessage(String message);

    public RequestMessage getRequestHeader();

    public GIOPVersion getGIOPVersion();

    public byte getEncodingVersion();

    public int getRequestId();

    public Integer getRequestIdInteger();

    public boolean isOneWay();

    public short getAddrDisposition();

    public String getOperationName();

    public ServiceContexts getRequestServiceContexts();

    public ServiceContexts getReplyServiceContexts();

    public Message getDispatchHeader();

    public void setDispatchHeader(Message msg);

    public ByteBuffer getDispatchBuffer();

    public void setDispatchBuffer(ByteBuffer byteBuffer);

    public int getThreadPoolToUse();

    public byte getStreamFormatVersion(); // REVIST name ForRequest?

    public byte getStreamFormatVersionForReply();

    // REVISIT - not sure if the final fragment and DII stuff should
    // go here.

    public void sendCancelRequestIfFinalFragmentNotSent();

    public void setDIIInfo(org.omg.CORBA.Request request);

    public boolean isDIIRequest();

    public Exception unmarshalDIIUserException(String repoId,
                                               InputStream inputStream);

    public void setDIIException(Exception exception);

    public void handleDIIReply(InputStream inputStream);


    public boolean isSystemExceptionReply();

    public boolean isUserExceptionReply();

    public boolean isLocationForwardReply();

    public boolean isDifferentAddrDispositionRequestedReply();

    public short getAddrDispositionReply();

    public IOR getForwardedIOR();

    public SystemException getSystemExceptionReply();

    ////////////////////////////////////////////////////
    //
    // Server side
    //

    public ObjectKey getObjectKey();

    public void setProtocolHandler(CorbaProtocolHandler protocolHandler);

    public CorbaProtocolHandler getProtocolHandler();

    ////////////////////////////////////////////////////
    //
    // ResponseHandler
    //

    public org.omg.CORBA.portable.OutputStream createReply();

    public org.omg.CORBA.portable.OutputStream createExceptionReply();

    ////////////////////////////////////////////////////
    //
    // from core.ServerRequest
    //

    public boolean executeReturnServantInResponseConstructor();

    public void setExecuteReturnServantInResponseConstructor(boolean b);

    public boolean executeRemoveThreadInfoInResponseConstructor();

    public void setExecuteRemoveThreadInfoInResponseConstructor(boolean b);

    public boolean executePIInResponseConstructor();

    public void setExecutePIInResponseConstructor(boolean b);
}

// End of file.
